毫无保留,这是我全部的嵌入式学习&秋招经验!
The following article is from 拓跋阿秀 Author 阿秀
作者丨阿秀
你好,我是阿秀。
往届互联网校招中一直都是软件为大,硬件不管是从招聘规模还是薪资来说可能都比不上软件行业。
近两年由于一些政治因素,比如美帝制裁华为海思等硬件厂,芯片这些硬件赛道慢慢得到重视,嵌入式这类硬件方向也乘东风而起了,从今年嵌入式的校招薪资就能看出一二来。
有些学弟学妹们也是从事嵌入式行业的,今年七月份的时候阿秀帮一位嵌入式学弟改过几轮简历,属于来回改过好几次的那种改简历。
他写的简历确实不错,并不是因为我给他改的好,而是他自己本来写的就很好,我从他的简历内容就能看出来他准备的不错。
我当时就觉得他应该能在今年秋招中拿到不错的offer,当时还是七月份,一转眼现在都11月了。
所以七月份的时候就向这位学弟问一下能否在他秋招结束后为后面的学弟学妹留下一些嵌入式方面的经验分享和学习建议,他很痛快的就答应了。
前几天也是收到了这位学弟的报喜,拿了不少offer,正如我七月份的时候预言的那样,他的几个offer确实不错。
其中既有嵌入式的,也有C++方面的,薪资都很不错的说,有一个offer甚至开到了 26K 之多,几个offer的总包基本都在 35W 左右。
这份嵌入式学习经验确实来之不易,不应该埋没,今天就来分享一下这份嵌入式的学习经验和总结。
以下是原文:
哈喽,星球的朋友们,我是小火汁。
前段时间一直在忙着准备秋招和毕业设计,忙的焦头烂额,今天终于有时间在星球分享下自己的学习体会。
目前,我已经拿到了满意的offer(已签三方),很高兴秀哥能够给我一次机会在这个平台分享自己的学习经历,也感谢秀哥在秋招期间给我的指导帮助,我会在下面的文章中分享自己的校招准备经过以及分享自己的嵌入式学习经验。
先说一下,我在秋招中一共拿到了5个offer,其中三个薪资比较不错,最终接的offer也在这三个里面
TCL 26K*13,总包 33W,嵌入式开发,偏底层 广联达 25K*14,总包 35W,嵌入式开发 中兴 21K*14,总包29W+,C++开发 ....
1、个人背景
首先,先介绍下我的情况,我跟秀哥一样,我本硕都是双非,本科自动化,硕士电子信息,无论文、无大厂实习经历,但有不少专业竞赛经历和项目经历。
2016年,我因为高考成绩不佳,去了一所普通本科院校读书。
看到身边很多同学都考上了重点大学,我心里挺羡慕的,也有很多的不甘心。
因此,我刚上大学就很积极的学习专业知识,积极参加专业竞赛,没有荒废自己的课余时间,后来我也通过自己努力,考上了研究生。
回顾6年大学生涯,我在大学参加过不少专业竞赛,也做过几个横向项目。
期间学会了单片机开发,如51单片机、STM32、Arduino等,画过PCB板子,写过Qt上位机,也玩过ROS和RTOS。
虽然学得不深,但让我有一定的专业基础,在参加竞赛和做项目的过程中,我发现自己在搜集资料和排查问题的能力有了很大的提高。
因此,建议有时间的同学可以积极参加一些适合自己的竞赛或横向项目,这远比你在王者峡谷或者召唤师峡谷里遨游有意义的多。
2、考虑就业
研二时,我开始思考未来的就业方向。
起初,我被互联网的高薪吸引,特别是听到身边有师兄师姐进入互联网大厂拿到高额薪水,这加深了我转行去互联网的想法。
为了进军互联网,我关注了不少互联网大佬的公众号,也加入了秀哥的星球。
在星球里学习,我知道了进军互联网大厂需要准备哪些知识,还看到了不少和我有着类似经历和烦恼的朋友在星球提问,他们都会分享自己的学习情况以及困惑,这在很大程度上增加了我对互联网行业及自身的认识。
在后面的秋招备战中,我隐隐觉得自己可能不太适合去互联网公司工作,所以中途放弃了,最后评估了自己参加过的竞赛和项目都具备软硬相结合的特点,决定选择走嵌入式软件开发和C++软件开发这两个方向。
在这次秋招过程中,我没有海投,而是花了很多时间打磨自己的简历,也找秀哥帮我看过简历,润色过简历。
在对自己的优势和不足有了比较深刻的认识后,先后投了20多家公司,最后通过了5家公司的面试。
这五家公司的岗位有嵌入式软件开发、C++软件开发和机器人软件开发,最后选择了C++软件开发。
尽管我后面没有选择互联网,但是这个前期备战过程,由于互联网要求比较高,为我的C++、数据结构与算法和计算机网络打下了坚实的基础。
目前的嵌入式开发更加倾向于智能化,也有一个比较好的发展前景,相信很多同学在就业方向选择时也考虑过嵌入式,但又因为觉得它入门起点较高,涉及的内容很多而不敢入手。
面我就大致聊聊我眼中的嵌入式,可能说的不是很对或者很全面,还望海涵。
3、关于嵌入式
学习嵌入式,我个人觉得你应该先了解嵌入式的方向,如果一开始就买开发板去研究,很容易让自己一头雾水,难以坚持下去。
嵌入式涉及的内容很多,我们不可能在短时间将其都掌握,即使时间很多,也很少人能够将其学完。
我们可以把嵌入式的大体学习方向可分为软件、硬件两个学习方向。
1、嵌入式硬件
嵌入式硬件的学习难度很大,自学成本很高,岗位相对较少,而嵌入式软件的学习难度相对较小,尤其是应用开发,就业岗位多,薪资也不错,是一个不错的选择。
对于嵌入式硬件方向,需要学习硬件电路原理图和PCB的设计、以及硬件的可靠性、稳定性和抗干扰设计。
由于大部分集成电路厂商都会提供参考的电路图,硬件电路原理图的设计相对来说会比较简单,因此硬件工程师的厉害与否主要是体现在电路的可靠性、稳定性和电磁兼容上。
2、嵌入式软件
对于嵌入式软件方向可以具体分为三类,分别是嵌入式驱动工程师、嵌入式系统工程师和嵌入式应用工程师。
其中嵌入式驱动工程师一般是指Linux上的驱动开发工程师,需负责编写和移植各种厂家的芯片驱动,因此对硬件的接口协议和操作系统的知识要求很高,门槛相当高;
嵌入式系统工程师主要负责编写固件,根据不同平台移植操作系统、优化系统,需要熟悉操作系统的组成与调度,门槛也高,很吃经验;
最后一个是嵌入式应用工程师,主要负责编写业务逻辑,调用驱动接口控制设备,在软件开发过程中涉及的内容范围非常广,主要用C语言开发,但也会涉及C++、计算机网络、操作系统、多线程、数据库、和通信协议等知识。
同时嵌入式应用工程师也是各大公司里需求量最大,门槛较低的一个职位,也是我今天主要想分享的内容。
从就业的角度出发,对于有一定计算机基础的同学们来说,如果你想入行嵌入式,嵌入式应用软件开发可能是你比较好的选择,没有第二个选项了。
其实只需要掌握这几个就够了,分别是C语言、操作系统基础、数据结构和算法基础、Linux系统编程、C++与STL、Qt界面开发,然后有针对性地背下相关的八股文,就可以在很大程度上应付秋招面试中的理论考察了。
如果你从来没有接触过嵌入式,建议你买一块STM32开发板或者51单片机开发板,跟着课程把相关的实验代码跑一遍,能够让你对嵌入式系统有一个深刻的了解。
4、学习建议
这里简单说下我的一些学习建议和意见,我会首先说一些我的学习资料,这也是大多数人都会学到的东西,然后我会推荐一些我自己在学习过程中用过的比较不错的独家资料。
1、C语言
需要掌握基本数据类型、运算符和表达式、数组、指针、函数、结构体、联合体、枚举、位运算等知识。其中重点掌握数组、指针、结构体、联合体和位运算,它们在面试中的考察频率很高。可以先在网上看C语言的常见面试题,再结合课程去查缺补漏。
推荐课程:千锋教育的嵌入式物联网C语言课程
地址:https://www.bilibili.com/video/BV1FA411v7YW
2、数据结构和算法基础
重点掌握数组、链表、队列、栈和二叉树等数据结构即可。
对于经典的算法,一定要有自己的理解并且学会手撕,需要重点掌握的有冒泡排序、选择排序、插入排序、归并排序、快速排序、二分查找算法,面试很有可能让你手撕代码或者问你某个算法的时间复杂度。
推荐阅读《大话数据结构》,并在LeetCode做一些练习。
对自己要求不高的同学可以只做一些很经典的简单题,加深自己对数据结构用法的理解。
3、操作系统基础
建议通读下一本操作系统教材,把常规的概念理解清楚即可。
如果不知道要重点理解哪些,可以看秀哥的学习笔记,对于应用开发来说,不会问的很深,面试前背背,一般问题不大。
你也可以按照秀哥网站上的计算机基础学科速成路线去学,也是可以的,绝对够用了:https://interviewguide.cn/notes/02-learning_route/01-basic-project/quick.html
4、Linux系统编程
需要掌握Linux开发环境的搭建、基本的Linux命令、文件IO和标准IO操作、进程控制、进程间通信、多线程编程、网络编程。
Linux的入门可以阅读正点原子的嵌入式驱动开发指南的前两章内容,并做相关实操;
学习IO、进程、多线程编程同样需要多点实操,能够加深你对应用编程的理解,可以阅读正点原子的I.MX6U嵌入式Linux C应用编程指南,跑下上面的代码。
以上所提正点原子的文档资料可以在gitee下载,链接:https://gitee.com/GuangzhouXingyi/projects。
学习网络编程需要有一定的计算机网络基础,没有基础的同学可以在B站看看千锋教育的计算机网络深入浅出课程:
5、C++与STL
这部分没什么好说的,直接看秀哥的学习笔记即可,秀哥对C++学习有很多好的建议,按着他说的去学就可以了。
我要再次高呼一声,秀哥,YYDS!!!
不过需要补充的是,嵌入式在面试中对STL的理论考察点不会太多,在面试中可以引导面试官去考察vector和list方面的内容,尤其是vector,能学多深就学多深。
其他容器可以不懂,但vector一定要会!!!
6、QT界面开发
如果你有一定的C++基础,建议学下Qt这个框架。因为这个框架并不难,有C++基础的话上手很快,可以增加你的就业面,因为很多嵌入式项目和军工、医疗设备项目都有提到Qt框架。
此外,不少研究生的研究方向与图像处理、点云处理相关,会接触到OpenCV、PCL这些库的使用,我们其实可以和Qt结合起来做一个相对完整的软件项目。
有条件的话,可以录制一下项目的工作视频和实验图片,在线上面试的时候,以PPT形式来介绍自己的科研经历。
Qt学习中,需要重点掌握信号和槽、事件循环机制、对象树等。
课程可以看传智教育的Qt从入门到实战这个视频
地址:https://www.bilibili.com/video/BV1g4411H78N
5、独家资料
上述所说提的那些知识都是比较通用的知识面,可能不足以让我们在秋招拿到一个更好的offer,因为大多数人都是这么学的。
所以我在这里再补充一些学习资料,需要对各位朋友有点帮助,你可以理解为我的独家资料吧,因为秀哥有拜托我好好写来着。。。
1、Goolg Test
在学习C++过程中,还可以接触一些C++单元测试框架,比如Google Test。
Google Test是由Google开源的C++单元测试框架,简称gtest。Google Test开源仓库地址:https://github.com/google/googletest
2、FreeRTOS
FreeRTOS,全称Free Real Time Operating System,即免费的实时操作系统。
相比于常见的Windows,MacOS,Linux等操作系统,实时操作系统(RTOS)是一种轻量级的操作系统,适用于嵌入式硬件中,用于解决单片机类裸机轮询方式在处理多个任务时的实时性不高的问题。
如果你有一定单片机开发基础,建议掌握它,可以提高你的竞争力。
关于FreeRTOS的文档资料,我推荐韦东山的freeRTOS教程:http://rtos.100ask.org/freeRTOS教程/index.html。
3、ROS
ROS,全称Robot Operating System,即机器人操作系统。它一个通信框架,如今已经广泛应用于机械臂、移动底盘、无人机、无人车等许多种类的机器人上。
如果你以后想去机器人公司工作,掌握ROS是一个加分项。在这里我推荐Autolabor的ROS教程:http://www.autolabor.com.cn/book/ROSTutorials/
4、SQLite
SQLite是一个基于C语言编写的关系型数据库管理系统,是一个程序库。
与许多其他的数据库系统不同,它是被嵌入到终端程序中的。SQLite作为嵌入式数据库软件, 可以说是部署得最广泛的数据库引擎,已经被一些浏览器、操作系统和嵌入式系统(如手机)广泛使用。
推荐教程SQLite教程:https://www.runoob.com/sqlite/sqlite-tutorial.html,建议掌握SQLite在Linux平台的编译与安装配置以及C/C++接口的使用。
5、嘉立创EDA
一款基于浏览器的免费电路板设计软件,在线绘制原理图、仿真、PCB软件。
如果你想学习PCB设计,建议可以关注嘉立创EDA,里面也有不少开源的硬件工程可以参考。嘉立创EDA:https://lceda.cn/
6、结语
说句扎心的话,今年就业形势很难,大环境如此,我们无法改变它,我们能做的只有尽量适应它然后调整自己,这可能听起来很残酷,但这是真的。
我也会说甜言蜜语好听的,也会灌鸡汤,但我不想说那些话,因为那些话没有一点帮助,如果你是明年秋招甚至是后年秋招的学弟学妹一定要早点好好准备起来,这是我最真挚的建议!
希望星球的朋友们都能够继续保持一个乐观的心态,有必要的话也可以适度降低自己的预期,千万不要被压力压垮了,因为活着比一切都重要。
一起加油,跑下去,太阳自然会升起,不要在黎明到来前的一刻被黑暗吞噬了。
点分享
点点赞
点在看